package cmc.asiainfo.com.baidumap.utils;

import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.support.v4.app.FragmentActivity;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;

import cmc.asiainfo.com.baidumap.R;
import jp.wasabeef.glide.transformations.CropCircleTransformation;
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;

/**
 * @Author xihaitao
 * @Date 2016/12/5
 * @Function:
 *      图片加载工具类
 */

public class ImageShowUtil {

    private static final String TAG = ImageShowUtil.class.getSimpleName();

    private static final int DEFAULT_LOADING_IMAGE = R.mipmap.image_loading_1_1;

    private static final int DEFAULT_ERROR_IMAGE = R.mipmap.data_load_fail_img;

    /**
     * 方法名：showImg
     * 功能：根据地址加载图片，不做任何图片处理；缓存原始数据和裁剪后数据；移除所有动画；
     *      设置资源加载过程中的占位数据；设置资源加载错误时的占位数据
     * 说明：如果要在非主线程里面使用Glide加载图片，请一定要使用Application上下文
     * @param context   使用Application上下文，Glide请求将不受Activity/Fragment生命周期控制。
     * @param imageView
     * @param imageUrl
     */
    public static void showImg(Context context, ImageView imageView, String imageUrl) {
        Glide.with(context)
                .load(imageUrl)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .dontAnimate()
                .placeholder(DEFAULT_LOADING_IMAGE)
                .error(DEFAULT_ERROR_IMAGE)
                .into(imageView);
    }

    /**
     * 方法名：showImg
     * 功能：根据地址加载图片，不做任何图片处理；缓存原始数据和裁剪后数据；移除所有动画
     *      设置资源加载过程中的占位数据；设置资源加载错误时的占位数据
     * @param activity  使用Activity作为上下文，Glide的请求会受到Activity生命周期控制。
     * @param imageView
     * @param imageUrl
     */
    public static void showImg(Activity activity, ImageView imageView, String imageUrl) {
        Glide.with(activity)
                .load(imageUrl)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .dontAnimate()
                .placeholder(DEFAULT_LOADING_IMAGE)
                .error(R.color.colorWhite)
                .into(imageView);
    }

    /**
     * 方法名：showImg
     * 功能：根据地址加载图片，不做任何图片处理；缓存原始数据和裁剪后数据；移除所有动画
     *      设置资源加载过程中的占位数据；设置资源加载错误时的占位数据
     * @param fragmentActivity  Glide的请求会受到FragmentActivity生命周期控制。
     * @param imageView
     * @param imageUrl
     */
    public static void showImg(FragmentActivity fragmentActivity, ImageView imageView, String imageUrl) {
        Glide.with(fragmentActivity)
                .load(imageUrl)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .dontAnimate()
                .placeholder(DEFAULT_LOADING_IMAGE)
                .error(DEFAULT_ERROR_IMAGE)
                .into(imageView);
    }

    /**
     * 方法名：showImg
     * 功能：根据地址加载图片，不做任何图片处理；缓存原始数据和裁剪后数据；移除所有动画
     *      设置资源加载过程中的占位数据；设置资源加载错误时的占位数据
     * @param fragment  Glide的请求会受到android.app.Fragment 生命周期控制。
     * @param imageView
     * @param imageUrl
     */
    public static void showImg(Fragment fragment, ImageView imageView, String imageUrl) {
        Glide.with(fragment)
                .load(imageUrl)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .dontAnimate()
                .placeholder(DEFAULT_LOADING_IMAGE)
                .error(DEFAULT_ERROR_IMAGE)
                .into(imageView);
    }

    /**
     * 方法名：showImg
     * 功能：根据地址加载图片，不做任何图片处理；缓存原始数据和裁剪后数据；移除所有动画
     *      设置资源加载过程中的占位数据；设置资源加载错误时的占位数据
     * @param fragment Glide的请求会受到android.support.v4.app.Fragment 生命周期控制。
     * @param imageView
     * @param imageUrl
     */
    public static void showImg(android.support.v4.app.Fragment fragment, ImageView imageView, String imageUrl) {
        Glide.with(fragment)
                .load(imageUrl)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .dontAnimate()
                .placeholder(DEFAULT_LOADING_IMAGE)
                .error(DEFAULT_ERROR_IMAGE)
                .into(imageView);
    }

    /**
     * 方法名：showRoundImg
     * 功能：根据地址加载图片，并将图片作圆形裁剪；
     *      缓存原始数据和裁剪后数据；移除所有动画；
     *      设置资源加载过程中的占位数据；设置资源加载错误时的占位数据
     * 说明：如果要在非主线程里面使用Glide加载图片，请一定要使用Application上下文
     * @param context   使用Application上下文，Glide请求将不受Activity/Fragment生命周期控制。
     * @param imageView
     * @param imageUrl
     */
    public static void showRoundImg(Context context, ImageView imageView, String imageUrl) {
        Glide.with(context)
                .load(imageUrl)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .dontAnimate()
                .placeholder(DEFAULT_LOADING_IMAGE)
                .error(DEFAULT_ERROR_IMAGE)
                .bitmapTransform(new CropCircleTransformation(context))
                .into(imageView);
    }

    /**
     * 方法名：showRoundedCornersImg
     * 功能：根据地址加载图片，并将图片作圆角处理；
     *      缓存原始数据和裁剪后数据；移除所有动画；
     *      设置资源加载过程中的占位数据；设置资源加载错误时的占位数据
     * @param context
     * @param imageView
     * @param imageUrl
     * @param radius    圆角角度值
     * @param margin    控件内部间隔
     */
    public static void showRoundedCornersImg(Context context, ImageView imageView, String imageUrl, int radius, int margin) {
        Glide.with(context)
                .load(imageUrl)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .dontAnimate()
                .placeholder(DEFAULT_LOADING_IMAGE)
                .error(DEFAULT_ERROR_IMAGE)
                .bitmapTransform(new RoundedCornersTransformation(context, radius, margin))
                .into(imageView);
    }

    /**
     * 方法名：showZoomImage
     * 功能：加载图片，同时缩放图片，使其铺满屏幕
     * @param context
     * @param imageView
     * @param imageUrl
     */
    public static void showZoomImage(Context context, ImageView imageView, String imageUrl) {

    }
}
